"""Archivo que contiene la clase que asocia la tabla 'Proyecto'"""
from sqlalchemy import Column
from sqlalchemy import Integer
from sqlalchemy import Unicode

from sqlalchemy.exc import IntegrityError
from sqlalchemy.ext.declarative import declarative_base

from sqlalchemy.orm import scoped_session
from sqlalchemy.orm import sessionmaker

from zope.sqlalchemy import ZopeTransactionExtension

from sqlalchemy import Text

from sqlalchemy import Table, ForeignKey
from sqlalchemy.orm import relationship, backref

from scp.modelo.models import Base

association_table = Table('proyecto_usuario', Base.metadata,
    Column('proyecto_id', Integer, ForeignKey('proyecto.id')),
    Column('usuario_id', Integer, ForeignKey('usuario.id'))
)

class Proyecto(Base):
    """ La clase del modelo declarativo SQLAlchemy para un objeto Proyecto. """
    __tablename__ = 'proyecto'
    id = Column(Integer, primary_key=True)
    nombre = Column(Text, nullable=False, unique=True)
    descripcion = Column(Text, nullable=False)
    fecha_inicio = Column(Text, nullable=False)
    estado = Column(Unicode(20), nullable=False)
    fases = relationship("Fase", backref="proyecto")
    tipos_items = relationship("Tipo_Item", backref="proyecto")
    usuarios = relationship("Usuario",
                    secondary=association_table, backref="proyectos")
